package com.briup.day13;

import java.io.File;
import java.io.IOException;

public class FileTest {
    public static void main(String[] args) throws IOException, InterruptedException {
        File file = new File("a.txt");
        // 确认文件是否存在
        System.out.println("a.txt是否实际存在:" + file.exists());
        // 查看文件的路径
        // 查看规范的路径 ---> 无论你创建对象时传入的是绝对路径还是相对路径，
        // 最终得到都是一个规范的绝对路径，而不是简单的路径拼接
        System.out.println(file.getCanonicalPath());
        // 查看绝对路径 ---> 本质上就是将该文件父文件夹的路径拼接上你在创建对象时传入的路径（传入相对时）
        System.out.println(file.getAbsolutePath());
        // 查看文件的路径，路径是否为绝对路径取决于你在创建文件对象时传入的路径
        System.out.println(file.getPath());

        // 文件不存在，创建实际的物理文件，可以通过createNewFile()方法
        boolean newFile = file.createNewFile();
        // 如果要创建文件夹，使用mkdir()方法，
        File file1 = new File("resources/a");
        boolean mkdir = file1.mkdir();
        // 如果存在多个连续不存在的文件夹需要创建，那么需要使用mkdirs()方法
        boolean mkdirs = file1.mkdirs();

        File file2 = new File("resource/a/b/d/c.txt");
        // 获取需要创建的文件父文件夹对象，先创建该文件夹
        File parentFile = file2.getParentFile();
        // 为了避免出现连续多个文件夹都不存在的情况，我们建议使用mkdirs创建文件夹，
        // 使用该方法会将该路径上没有的文件夹都进行创建
        boolean mkdirs1 = parentFile.mkdirs();
        boolean newFile1 = file2.createNewFile();

        // 删除磁盘上的物理文件
        // delete()方法是直接删除，不用等程序执行完毕
        boolean delete = file.delete();
        // deleteOnExit()方法，是先标记该文件需要删除，然后在程序退出时将其进行删除
        file.deleteOnExit();
        Thread.sleep(10000);
    }

    private static void test() {
          /*
            IO流指的是：将我们程序中的数据以数据流的方式，
            将数据流向程序外，或将程序外中的数据流向程序中，
            IO指的是 Input和Output，具体的流向以当前正在编写
            和维护的程序为中心；如果是将程序中的数据写出到程序外，
            那么就是Output，如果是将程序外的数据写入/读取到程序中，
            那么就是Input；

            文件是数据存储的载体，如可以将程序中的数据写入到某一个文件中，
            以及咱们现在编写的Java代码也是以数据的形式存储在各.java文件中；

            如果只是将数据存储在内存中，是无法实现数据的持久化存储的，
            当程序关闭之后，存储在内存中的数据就会丢失；如果我们要实现数据的持久化存储，
            必须将数据存储到磁盘/硬盘中，而存储在磁盘中时，数据必须以文件作为载体进行管理和维护

            Java语言强调万事万物皆对象，所以对于文件，在Java中抽象了一个File类进行总结描述，
            通过File对象就可以抽象的在Java程序中表示在磁盘中某一个确定的文件
         */
        // 使用File类描述客观的某一个文件/文件夹，该文件可以是切实存在的，
        // 也可以是不存在的，在创建File类对象时必须指定你要操作的文件所在路径
        /*
        文件的路径：
            1、绝对路径：指的是从操作系统的根盘符出发，直到你指定文件的所有路径，
            如当前文件的绝对路径:
            D:\Project\project_jslg\JavaStudy\src\main\java\com\briup\day13\FileTest.java
            2、相对路径： 使用较多
            选定一个文件作为一个参照系，找到另一个文件相对于该文件的位置，
            在Java程序中，如果是在main方法内使用相对路径，那么相对路径的参照系是当前项目文件夹所在路径；
            如要使用相对路径表示本文件的位置，那么直接写成：
            src\main\java\com\briup\day13\FileTest.java
         */
        File file = new File(
                "D:\\Project\\project_jslg\\JavaStudy\\src\\main" +
                        "\\java\\com\\briup\\day13\\FileTest.java");
        // exists()方法，可以校验你操作的文件对象，其在磁盘中是否真实存在
        System.out.println("文件是否存在:" + file.exists());

        // 使用相对路径找到AssertUtil类文件
        File file1 = new File("src/main/java/com/briup/day13/AssertUtil.java");
        System.out.println(file1.exists());
    }
}
